package main

import (
	"github.com/golang-module/carbon"
	"go-GameTimer-X/app/handlers"
	"go-GameTimer-X/app/middleware"
	"go-GameTimer-X/app/models"
	"log"

	"github.com/gin-gonic/gin"
)

func main() {
	// 初始化数据库
	dsn := "chat_server:7i7Bb6A6L3DLEmiD@tcp(43.135.112.21:3306)/chat_server?charset=utf8mb4&parseTime=True&loc=Local"
	if err := models.InitDB(dsn); err != nil {
		log.Fatalf("数据库初始化失败: %v", err)
	}

	// 设置时区（可选）
	carbon.SetTimezone(carbon.Local)

	// 创建 Gin 实例
	r := gin.Default()

	r.Use(middleware.RateLimiter())

	// 健康检查
	r.GET("/health", func(c *gin.Context) {
		c.JSON(200, gin.H{"status": "ok"})
	})

	// 认证相关路由
	auth := r.Group("/auth")
	{
		auth.POST("/login", handlers.LoginHandler)
		auth.POST("/register", handlers.RegisterHandler)
	}

	// 受保护的路由
	protected := r.Group("/api")
	protected.Use(middleware.JWTAuthMiddleware())
	{
		protected.GET("/user", func(c *gin.Context) {
			userID := c.GetString("userID")
			role := c.GetString("role")
			c.JSON(200, gin.H{"userID": userID, "role": role, "message": "认证成功"})
		})
	}

	// 刷新 Token 路由
	r.GET("/refresh_token", handlers.RefreshTokenHandler)

	// 启动服务器
	r.Run(":8080")
}
